<?php
//============================================================+
// File name   : html_entity_decode_php4.php
// Version     : 1.0.002
// Begin       : 2006-06-22
// Last Update : 2010-06-03
// Author      : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
// License     : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
// Copyright (C) 2006-2010  Nicola Asuni - Tecnick.com S.r.l.
//
// This file is part of TCPDF software library.
//
// TCPDF is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// TCPDF is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with TCPDF.  If not, see <http://www.gnu.org/licenses/>.
//
// See LICENSE.TXT file for more information.
// -------------------------------------------------------------------
//
// Description : This is a PHP4 function that redefine the
//               standard html_entity_decode function to support
//               UTF-8 encoding.
//
//============================================================+

/**
 * This is a PHP4 function that redefine the standard
 * html_entity_decode function to support UTF-8 encoding.
 * @package com.tecnick.tcpdf
 * @author Nicola Asuni
 * @copyright 2006-2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
 * @link http://www.tcpdf.org
 * @license http://www.gnu.org/copyleft/lesser.html LGPL
 */

/**
 * Returns the UTF-8 string corresponding to unicode value.
 * @param $num unicode value to convert.
 * @return string converted
 */
function code_to_utf8($num) {
	if ($num <= 0x7F) {
		return chr($num);
	} elseif ($num <= 0x7FF) {
		return chr(($num >> 0x06) + 0xC0).chr(($num & 0x3F) + 128);
	} elseif ($num <= 0xFFFF) {
		return chr(($num >> 0x0C) + 0xE0).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80);
	} elseif ($num <= 0x1FFFFF) {
		return chr(($num >> 0x12) + 0xF0).chr((($num >> 0x0C) & 0x3F) + 0x80).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80);
	}
	return ' '; // default value
}

/**
 * Reverse function for htmlentities.
 * Convert entities in UTF-8.
 * @param $text_to_convert Text to convert.
 * @return string converted
 */
function html_entity_decode_php4($text_to_convert) {
	$htmlentities_table = array (
		'&Aacute;' => chr(195).chr(129),
		'&aacute;' => chr(195).chr(161),
		'&Acirc;' => chr(195).chr(130),
		'&acirc;' => chr(195).chr(162),
		'&acute;' => chr(194).chr(180),
		'&AElig;' => chr(195).chr(134),
		'&aelig;' => chr(195).chr(166),
		'&Agrave;' => chr(195).chr(128),
		'&agrave;' => chr(195).chr(160),
		'&alefsym;' => chr(226).chr(132).chr(181),
		'&Alpha;' => chr(206).chr(145),
		'&alpha;' => chr(206).chr(177),
		'&amp;' => chr(38),
		'&and;' => chr(226).chr(136).chr(167),
		'&ang;' => chr(226).chr(136).chr(160),
		'&apos;' => chr(39),
		'&Aring;' => chr(195).chr(133),
		'&aring;' => chr(195).chr(165),
		'&asymp;' => chr(226).chr(137).chr(136),
		'&Atilde;' => chr(195).chr(131),
		'&atilde;' => chr(195).chr(163),
		'&Auml;' => chr(195).chr(132),
		'&auml;' => chr(195).chr(164),
		'&bdquo;' => chr(226).chr(128).chr(158),
		'&Beta;' => chr(206).chr(146),
		'&beta;' => chr(206).chr(178),
		'&brvbar;' => chr(194).chr(166),
		'&bull;' => chr(226).chr(128).chr(162),
		'&cap;' => chr(226).chr(136).chr(169),
		'&Ccedil;' => chr(195).chr(135),
		'&ccedil;' => chr(195).chr(167),
		'&cedil;' => chr(194).chr(184),
		'&cent;' => chr(194).chr(162),
		'&Chi;' => chr(206).chr(167),
		'&chi;' => chr(207).chr(135),
		'&circ;' => chr(203).chr(134),
		'&clubs;' => chr(226).chr(153).chr(163),
		'&cong;' => chr(226).chr(137).chr(133),
		'&copy;' => chr(194).chr(169),
		'&crarr;' => chr(226).chr(134).chr(181),
		'&cup;' => chr(226).chr(136).chr(170),
		'&curren;' => chr(194).chr(164),
		'&dagger;' => chr(226).chr(128).chr(160),
		'&Dagger;' => chr(226).chr(128).chr(161),
		'&darr;' => chr(226).chr(134).chr(147),
		'&dArr;' => chr(226).chr(135).chr(147),
		'&deg;' => chr(194).chr(176),
		'&Delta;' => chr(206).chr(148),
		'&delta;' => chr(206).chr(180),
		'&diams;' => chr(226).chr(153).chr(166),
		'&divide;' => chr(195).chr(183),
		'&Eacute;' => chr(195).chr(137),
		'&eacute;' => chr(195).chr(169),
		'&Ecirc;' => chr(195).chr(138),
		'&ecirc;' => chr(195).chr(170),
		'&Egrave;' => chr(195).chr(136),
		'&egrave;' => chr(195).chr(168),
		'&empty;' => chr(226).chr(136).chr(133),
		'&emsp;' => chr(226).chr(128).chr(131),
		'&ensp;' => chr(226).chr(128).chr(130),
		'&Epsilon;' => chr(206).chr(149),
		'&epsilon;' => chr(206).chr(181),
		'&equiv;' => chr(226).chr(137).chr(161),
		'&Eta;' => chr(206).chr(151),
		'&eta;' => chr(206).chr(183),
		'&ETH;' => chr(195).chr(144),
		'&eth;' => chr(195).chr(176),
		'&Euml;' => chr(195).chr(139),
		'&euml;' => chr(195).chr(171),
		'&euro;' => chr(226).chr(130).chr(172),
		'&exist;' => chr(226).chr(136).chr(131),
		'&fnof;' => chr(198).chr(146),
		'&forall;' => chr(226).chr(136).chr(128),
		'&frac12;' => chr(194).chr(189),
		'&frac14;' => chr(194).chr(188),
		'&frac34;' => chr(194).chr(190),
		'&frasl;' => chr(226).chr(129).chr(132),
		'&Gamma;' => chr(206).chr(147),
		'&gamma;' => chr(206).chr(179),
		'&ge;' => chr(226).chr(137).chr(165),
		'&harr;' => chr(226).chr(134).chr(148),
		'&hArr;' => chr(226).chr(135).chr(148),
		'&hearts;' => chr(226).chr(153).chr(165),
		'&hellip;' => chr(226).chr(128).chr(166),
		'&Iacute;' => chr(195).chr(141),
		'&iacute;' => chr(195).chr(173),
		'&Icirc;' => chr(195).chr(142),
		'&icirc;' => chr(195).chr(174),
		'&iexcl;' => chr(194).chr(161),
		'&Igrave;' => chr(195).chr(140),
		'&igrave;' => chr(195).chr(172),
		'&image;' => chr(226).chr(132).chr(145),
		'&infin;' => chr(226).chr(136).chr(158),
		'&int;' => chr(226).chr(136).chr(171),
		'&Iota;' => chr(206).chr(153),
		'&iota;' => chr(206).chr(185),
		'&iquest;' => chr(194).chr(191),
		'&isin;' => chr(226).chr(136).chr(136),
		'&Iuml;' => chr(195).chr(143),
		'&iuml;' => chr(195).chr(175),
		'&Kappa;' => chr(206).chr(154),
		'&kappa;' => chr(206).chr(186),
		'&Lambda;' => chr(206).chr(155),
		'&lambda;' => chr(206).chr(187),
		'&lang;' => chr(226).chr(140).chr(169),
		'&laquo;' => chr(194).chr(171),
		'&larr;' => chr(226).chr(134).chr(144),
		'&lArr;' => chr(226).chr(135).chr(144),
		'&lceil;' => chr(226).chr(140).chr(136),
		'&ldquo;' => chr(226).chr(128).chr(156),
		'&le;' => chr(226).chr(137).chr(164),
		'&lfloor;' => chr(226).chr(140).chr(138),
		'&lowast;' => chr(226).chr(136).chr(151),
		'&loz;' => chr(226).chr(151).chr(138),
		'&lrm;' => chr(226).chr(128).chr(142),
		'&lsaquo;' => chr(226).chr(128).chr(185),
		'&lsquo;' => chr(226).chr(128).chr(152),
		'&macr;' => chr(194).chr(175),
		'&mdash;' => chr(226).chr(128).chr(148),
		'&micro;' => chr(194).chr(181),
		'&middot;' => chr(194).chr(183),
		'&minus;' => chr(226).chr(136).chr(146),
		'&Mu;' => chr(206).chr(156),
		'&mu;' => chr(206).chr(188),
		'&nabla;' => chr(226).chr(136).chr(135),
		'&nbsp;' => chr(194).chr(160),
		'&ndash;' => chr(226).chr(128).chr(147),
		'&ne;' => chr(226).chr(137).chr(160),
		'&ni;' => chr(226).chr(136).chr(139),
		'&not;' => chr(194).chr(172),
		'&notin;' => chr(226).chr(136).chr(137),
		'&nsub;' => chr(226).chr(138).chr(132),
		'&Ntilde;' => chr(195).chr(145),
		'&ntilde;' => chr(195).chr(177),
		'&Nu;' => chr(206).chr(157),
		'&nu;' => chr(206).chr(189),
		'&Oacute;' => chr(195).chr(147),
		'&oacute;' => chr(195).chr(179),
		'&Ocirc;' => chr(195).chr(148),
		'&ocirc;' => chr(195).chr(180),
		'&OElig;' => chr(197).chr(146),
		'&oelig;' => chr(197).chr(147),
		'&Ograve;' => chr(195).chr(146),
		'&ograve;' => chr(195).chr(178),
		'&oline;' => chr(226).chr(128).chr(190),
		'&Omega;' => chr(206).chr(169),
		'&omega;' => chr(207).chr(137),
		'&Omicron;' => chr(206).chr(159),
		'&omicron;' => chr(206).chr(191),
		'&oplus;' => chr(226).chr(138).chr(149),
		'&or;' => chr(226).chr(136).chr(168),
		'&ordf;' => chr(194).chr(170),
		'&ordm;' => chr(194).chr(186),
		'&Oslash;' => chr(195).chr(152),
		'&oslash;' => chr(195).chr(184),
		'&Otilde;' => chr(195).chr(149),
		'&otilde;' => chr(195).chr(181),
		'&otimes;' => chr(226).chr(138).chr(151),
		'&Ouml;' => chr(195).chr(150),
		'&ouml;' => chr(195).chr(182),
		'&para;' => chr(194).chr(182),
		'&part;' => chr(226).chr(136).chr(130),
		'&permil;' => chr(226).chr(128).chr(176),
		'&perp;' => chr(226).chr(138).chr(165),
		'&Phi;' => chr(206).chr(166),
		'&phi;' => chr(207).chr(134),
		'&Pi;' => chr(206).chr(160),
		'&pi;' => chr(207).chr(128),
		'&piv;' => chr(207).chr(150),
		'&plusmn;' => chr(194).chr(177),
		'&pound;' => chr(194).chr(163),
		'&prime;' => chr(226).chr(128).chr(178),
		'&Prime;' => chr(226).chr(128).chr(179),
		'&prod;' => chr(226).chr(136).chr(143),
		'&prop;' => chr(226).chr(136).chr(157),
		'&Psi;' => chr(206).chr(168),
		'&psi;' => chr(207).chr(136),
		'&radic;' => chr(226).chr(136).chr(154),
		'&rang;' => chr(226).chr(140).chr(170),
		'&raquo;' => chr(194).chr(187),
		'&rarr;' => chr(226).chr(134).chr(146),
		'&rArr;' => chr(226).chr(135).chr(146),
		'&rceil;' => chr(226).chr(140).chr(137),
		'&rdquo;' => chr(226).chr(128).chr(157),
		'&real;' => chr(226).chr(132).chr(156),
		'&reg;' => chr(194).chr(174),
		'&rfloor;' => chr(226).chr(140).chr(139),
		'&Rho;' => chr(206).chr(161),
		'&rho;' => chr(207).chr(129),
		'&rlm;' => chr(226).chr(128).chr(143),
		'&rsaquo;' => chr(226).chr(128).chr(186),
		'&rsquo;' => chr(226).chr(128).chr(153),
		'&sbquo;' => chr(226).chr(128).chr(154),
		'&Scaron;' => chr(197).chr(160),
		'&scaron;' => chr(197).chr(161),
		'&sdot;' => chr(226).chr(139).chr(133),
		'&sect;' => chr(194).chr(167),
		'&shy;' => chr(194).chr(173),
		'&Sigma;' => chr(206).chr(163),
		'&sigma;' => chr(207).chr(131),
		'&sigmaf;' => chr(207).chr(130),
		'&sim;' => chr(226).chr(136).chr(188),
		'&spades;' => chr(226).chr(153).chr(160),
		'&sub;' => chr(226).chr(138).chr(130),
		'&sube;' => chr(226).chr(138).chr(134),
		'&sum;' => chr(226).chr(136).chr(145),
		'&sup1;' => chr(194).chr(185),
		'&sup2;' => chr(194).chr(178),
		'&sup3;' => chr(194).chr(179),
		'&sup;' => chr(226).chr(138).chr(131),
		'&supe;' => chr(226).chr(138).chr(135),
		'&szlig;' => chr(195).chr(159),
		'&Tau;' => chr(206).chr(164),
		'&tau;' => chr(207).chr(132),
		'&there4;' => chr(226).chr(136).chr(180),
		'&Theta;' => chr(206).chr(152),
		'&theta;' => chr(206).chr(184),
		'&thetasym;' => chr(207).chr(145),
		'&thinsp;' => chr(226).chr(128).chr(137),
		'&THORN;' => chr(195).chr(158),
		'&thorn;' => chr(195).chr(190),
		'&tilde;' => chr(203).chr(156),
		'&times;' => chr(195).chr(151),
		'&trade;' => chr(226).chr(132).chr(162),
		'&Uacute;' => chr(195).chr(154),
		'&uacute;' => chr(195).chr(186),
		'&uarr;' => chr(226).chr(134).chr(145),
		'&uArr;' => chr(226).chr(135).chr(145),
		'&Ucirc;' => chr(195).chr(155),
		'&ucirc;' => chr(195).chr(187),
		'&Ugrave;' => chr(195).chr(153),
		'&ugrave;' => chr(195).chr(185),
		'&uml;' => chr(194).chr(168),
		'&upsih;' => chr(207).chr(146),
		'&Upsilon;' => chr(206).chr(165),
		'&upsilon;' => chr(207).chr(133),
		'&Uuml;' => chr(195).chr(156),
		'&uuml;' => chr(195).chr(188),
		'&weierp;' => chr(226).chr(132).chr(152),
		'&Xi;' => chr(206).chr(158),
		'&xi;' => chr(206).chr(190),
		'&Yacute;' => chr(195).chr(157),
		'&yacute;' => chr(195).chr(189),
		'&yen;' => chr(194).chr(165),
		'&yuml;' => chr(195).chr(191),
		'&Yuml;' => chr(197).chr(184),
		'&Zeta;' => chr(206).chr(150),
		'&zeta;' => chr(206).chr(182),
		'&zwj;' => chr(226).chr(128).chr(141),
		'&zwnj;' => chr(226).chr(128).chr(140),
		'&gt;' => '>',
		'&lt;' => '<'
	);
	$return_text = strtr($text_to_convert, $htmlentities_table);
	$return_text = preg_replace('~&#x([0-9a-f]+);~ei', 'code_to_utf8(hexdec("\\1"))', $return_text);
	$return_text = preg_replace('~&#([0-9]+);~e', 'code_to_utf8(\\1)', $return_text);
	return $return_text;
}

//============================================================+
// END OF FILE
//============================================================+
?>
